﻿using System;

namespace octalforty.Syndication.Core
{
    /// <summary>
    /// Represents an individual syndication feed item within a <see cref="ISyndicationFeed"/>,
    /// acting as a container for metadata and data associated with the <see cref="ISyndicationFeedItem"/>.
    /// </summary>
    public interface ISyndicationFeedItem
    {
        /// <summary>
        /// Gets or sets a <see cref="String"/> which contains a human-readable
        /// title for the <see cref="ISyndicationFeedItem"/>.
        /// </summary>
        /// <example>Venice Film Festival Tries to Quit Sinking</example>
        String Title
        { get; set; }

        /// <summary>
        /// Gets or sets a <see cref="String"/> which contains the URL
        /// of the website which corresponds to the <see cref="ISyndicationFeedItem"/>.
        /// </summary>
        /// <example>http://nytimes.com/2004/12/07FEST.html</example>
        String Link
        { get; set; }

        /// <summary>
        /// Gets or sets a <see cref="String"/> which contains a phrase or a sentence 
        /// describing the <see cref="ISyndicationFeedItem"/>.
        /// </summary>
        /// <example>
        /// Some of the most heated chatter at the Venice Film Festival this week was 
        /// about the way that the arrival of the stars at the Palazzo del Cinema was being staged.
        /// </example>
        String Description
        { get; set; }

        /// <summary>
        /// Gets or sets a <see cref="String"/> which contains copyright notice 
        /// for content in the <see cref="ISyndicationFeedItem"/>.
        /// </summary>
        /// <example>Copyright 2002, Spartanburg Herald-Journal</example>
        String Copyright
        { get; set; }

        /// <summary>
        /// Gets or sets the <see cref="IPerson"/> which represents a person
        /// who is the author of the <see cref="ISyndicationFeedItem"/>.
        /// </summary>
        IPerson Author
        { get; set; }

        /// <summary>
        /// Gets or sets the <see cref="DateTime"/> which contains the date and time
        /// of initial creation or first availability of the <see cref="ISyndicationFeedItem"/>.
        /// </summary>
        DateTime? PublishedOn
        { get; set; }

        /// <summary>
        /// Gets or sets the <see cref="DateTime"/> which indicates the date and time
        /// indicating the most recent instant in time when the <see cref="ISyndicationFeedItem"/> was modified 
        /// in a way the publisher considers significant.
        /// </summary>
        DateTime? UpdatedOn
        { get; set; }

        /// <summary>
        /// Gets or sets a <see cref="String"/> which contains a permanent, universally unique
        /// identifier for the <see cref="ISyndicationFeedItem"/>.
        /// </summary>
        String UniqueIdentifier
        { get; set; }
    }
}
